package reflect;

import java.io.File;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.URISyntaxException;
import java.util.Arrays;

/**
 * 自动调用那些与当前类Test2在同一个包中那些类中的公开的,无参的方法
 */
public class Test2 {
    public static void main(String[] args) {
        try {
//            开发中常用的相对路径:
//            类名.class.getResource(".")
//            对应的就是该类所在的目录(字节码文件所在的目录)
            File file = new File(Test2.class.getResource(".").toURI());
            File[] files = file.listFiles(f->f.getName().endsWith(".class"));
            for (File f : files){
//                  System.out.println(f.getName());
                  String fileName = f.getName();

                  String[] data = fileName.split("\\.");
//                String className = fileName.substring(0,fileName.indexOf("."));

//                System.out.println(Arrays.toString(data));
//                Class c = Class.forName(Test2.class.getPackage().getName()+"."+className);
                Class c= Class.forName(Test2.class.getPackage().getName() + "." + data[0]);


                Object obj = c.newInstance();
                Method[] methods = c.getMethods();
                for (Method m : methods){
                    if(m.getModifiers() == Modifier.PUBLIC && m.getParameterCount() == 0){
                        System.out.println("方法名"+m.getName());
                        m.invoke(obj);
                    }
                }

            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
